'use strict';
/**
 * author：小小游 --- allen
 * date：2018.02.05
 * lastUpdateDate：2018.02.05
 * description：Generator函数与yield语句的使用
 */
 /**
  * 这是一个generator函数，内部它实现了Iterator接口
  * generator函数可以配合yield语句一起执行，如果没有yield语句，
  * 那么当调用next()方法的时候，就会执行完整个generator函数
  * 如果有了yield语句，它会把generator函数内部分成几段去执行，
  * 那么每一个断点是通过yield语句来暂停的
  * yield语句hereturn语句的区别就在于：yield语句可以返回多个值，
  * 而return语句每次只能返回一个值
  */
/**
 * 在一个表达式当中，使用yield语句必须用括号括起来，不然会报错，
 * 特别注意下
 */
// 做一个加法的generator函数
function * sum (a, b) {
    return a + b;
}

function * executedSum () {
    // error ---> Unexpected strict mode reserved word
    // let itResult = sum (yield 1, yield 666 + yield 100);
    let itResult = sum (yield 1, (yield 666) + (yield 100));
    console.log(itResult);
}

function * fn (qq) {
    // error ---> Unexpected strict mode reserved word
    // console.log('my qq is：' + yield qq);
    // yied语句本身没有返回值，也可以理解成它每次给你返回undefined
    console.log('my qq is：' + (yield qq));
}

let iterator = fn ('13710681303');
console.log(iterator.next());
// console.log(iterator.next());
console.log(iterator.next('214913005'));

let iterator2 = executedSum ();
console.log(iterator2.next());
console.log(iterator2.next());
console.log(iterator2.next());
console.log(iterator2.next());
